package net.feixiang.creational.builder.contrary;

/**
 * 非建造者模式示例
 * <p>
 * 该类展示了在没有使用建造者模式的情况下，如何创建一个计算机对象。由于构造函数参数过多且顺序容易出错，导致代码冗余和可读性差。并且新增属性时需要修改多个构造函数，增加了维护成本。
 * </p>
 *
 * @author 飞翔
 * @see <a href="https://www.feixiang.net/Java%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E7%AC%AC%E4%B8%80%E7%AB%A0%E3%80%81%E5%88%9B%E5%BB%BA%E5%9E%8B%E6%A8%A1%E5%BC%8F/14.html">建造者模式</a>
 */
public class NonBuilderComputer {
    private String cpu;          // 中央处理器
    private String memory;       // 内存
    private String disk;         // 硬盘
    private String graphicsCard; // 显卡

    // 构造函数参数过多，且顺序容易出错
    public NonBuilderComputer(String cpu, String memory, String disk, String graphicsCard) {
        this.cpu = cpu;
        this.memory = memory;
        this.disk = disk;
        this.graphicsCard = graphicsCard;
    }

    // 不同的组合需要不同的构造函数，导致代码冗余
    public NonBuilderComputer(String cpu, String memory) {
        this.cpu = cpu;
        this.memory = memory;
        this.disk = ""; // 默认值
        this.graphicsCard = ""; // 默认值
    }

    @Override
    public String toString() {
        return "NonBuilderComputer{" +
                "cpu='" + cpu + '\'' +
                ", memory='" + memory + '\'' +
                ", disk='" + disk + '\'' +
                ", graphicsCard='" + graphicsCard + '\'' +
                '}';
    }
}